博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java里的格式化
阅读量:7005 次
发布时间:2019-06-27

本文共 4582 字,大约阅读时间需要 15 分钟。

  hot3.png

今天看到帖子www.oschina.net/code/snippet_436266_45306,用字符串数组替换字符串中“出库单号?可导出DRP的出库数量为?,不需要导入目标系统!“ 的问号。
我写的是:
String str="出库单号?可导出DRP的出库数量为?,不需要导入目标系统!";String[] paras = new String[]{"1000001","99"};for(String para : paras){    str = str.replaceFirst("\\?", para);}System.out.println(str);

看了答案,总结下:

1.MessageFormat,没发现MessageFormat怎么替换问号,可以做模板替换
MessageFormat用法:

String pig = "{0}{1,number,#.##}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}";String result = MessageFormat.format(pig,"A",5.5,"C","D","E","F","G","H","I","G","K","L","M","N","O","P","Q");System.out.println(result);//		最终结果是:ABCDEFGHIJKLMNOPQString message = "oh, {0} is 'a' pig";  result = MessageFormat.format(message, "ZhangSan"); System.out.println(result);//		最终结果是:oh, ZhangSan is a pigmessage = "oh, {0} is ''a'' pig";  result = new MessageFormat(message).format(message, "Zhangsan");System.out.println(result);Object[] objs = new Object[]{"张三"};result = new MessageFormat(message).format(objs);System.out.println(result);//		最终结果是:oh, ZhangSan is 'a' pigmessage = "oh, '{0}' is a pig";System.out.println(MessageFormat.format(message, "ZhangSan"));//		最终结果是:oh, {0} is 'a' pig,此处ZhangSan无法显示。message = "oh, '{0,number,#.#} is a pig";  result = MessageFormat.format(message, 100.5);System.out.println(result);result = new MessageFormat(message).format(new Object[]{100.5});System.out.println(result);//		最终结果是:oh, {0,number,#.#}  is 'a' pig。message = "oh, {0,number,#.#} is a pig";System.out.println(MessageFormat. format(message, 3.1));//		最终结果是:oh, 3.1 is a pigmessage = "oh, { is a pig";//		最终结果是:异常java.lang.IllegalArgumentException: Unmatched braces in the patternmessage = "oh, } is a pig";//		最终结果是:oh, } is a pigmessage = "欢迎光临,当前({0})等待的业务受理的顾客有{1}位,请排号办理业务!";result =MessageFormat.format(message, new Date(),35);System.out.println(result);//		最终结果是:欢迎光临,当前(15-1-20 下午11:17)等待的业务受理的顾客有35位,请排号办理业务! message = "欢迎光临,当前({0,date,full})等待的业务受理的顾客有{1}位,请排号办理业务!";result =MessageFormat.format(message, new Date(),35);System.out.println(result);//		最终结果是:欢迎光临,当前(2015年1月20日 星期二)等待的业务受理的顾客有35位,请排号办理业务! /* * 原始的是:"oh, '{0,number,#.#} is a pig";这种的,原始的调用 new MessageFormat(pattern).format(Object para); * 引号 大小括号了解。 */

补充20150528:

注意单引号引用:

System.out.println(MessageFormat.format("您好{0},您的个人挂证信息已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!", 123,"456"));

正常输出:
您好123,您的<a class='blue' target='_blank' href='/resume/456.html'>个人挂证信息</a>已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!
改成:
System.out.println(MessageFormat.format("您好{0},您的个人挂证信息已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!", 123,"456"));

输出:
您好123,您的<a class='blue' target='_blank' href=/resume/{1}.html>个人挂证信息</a>已被审核入库,这几天请保持您的电话畅通以便企业/猎头与您联系!
输出没替换!
支持的类型等看文档吧!

2.其中一答案
String str="出库单号?可导出DRP的出库数量为?,不需要导入目标系统!";String[] paras = new String[]{"1000001","99"};System.out.println(String.format(str, paras));

String.format实际调用
new Formatter().format(str, paras).toString()

java.util.Formatter也是格式化所用,System.out.printf()实际调用java.util.Formatter(了解)
Formatter f1 = new Formatter(System.out);                //格式化输出字符串和数字                f1.format("格式化输出:%s %d", "a", 1235);                System.out.println("\n--------");                //日期的格式化                Calendar c = new GregorianCalendar();                f1.format("当前日期:%1$tY-%1$tm-%1$te", c);                System.out.println("\n--------");                //日期的格式化,并将格式化结果存储到一个字符串变量中                String s = String.format("当前日期:%1$tY-%1$tm-%1$te", c);                System.out.println(s);                //2$:取第二个参数                //-: 指定为左对齐,默认右对齐                //5:最大输出宽度为20,不够会补空格,实际若超过则全部输出                //.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数                //s :表示输入参数是字符串                f1.format("%2$-5.2s %1$2s", "123", "456");                //将格式化的结果存储到字符串                System.out.println("\n--------");                String fs = String.format("身高体重(%.2f , %d)", 173.2, 65);                System.out.println(fs);                //printf()本质上也是用System.out作为输出目标构造Formatter对象                //调用format方法,并将printf的参数传给format方法而得。                System.out.println("\n--------");                System.out.printf("身高体重(%.2f , %d)", 180.2, 65);

3.java.text.Format为抽象类,子类有DateFormat,MessageFormat,NumberFormat

4.模板替换工具类
大致这个意思:http://my.oschina.net/haogrgr/blog/222349
5.复下正则

Matcher matcher = Pattern.compile("\\?").matcher(str);StringBuffer sb = new StringBuffer();for (int i = 0; i < paras.length && matcher.find(); i++) {	matcher.appendReplacement(sb, paras[i]);}matcher.appendTail(sb);System.out.println(sb.toString());

结束:1.java的格式化真复杂!2.在系统中的短信模板等都提取出来,放在配置文件里。

转载于:https://my.oschina.net/wrean/blog/369639

你可能感兴趣的文章
MIPI协议中文详解【转】
查看>>
JS操作JSON总结
查看>>
历年诺贝尔经济学奖
查看>>
SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
查看>>
HTTP状态码详解
查看>>
24:打印月历
查看>>
PDF.NET数据开发框架实体类操作实例
查看>>
深度剖析Spark分布式执行原理
查看>>
使用vlc实现视频TS流的推送
查看>>
Android Fragment 真正的完全解析
查看>>
Node.js开发Web后台服务(转载)
查看>>
使用flow捕获js错误提高代码质量
查看>>
JAVA WebSocKet ( 简单的聊天室 )
查看>>
2017.04.18 Dobot-真正适合初学者的廉价机器人
查看>>
钱文忠解读百家姓
查看>>
postgresql shell发起select操作报错ERROR: relation "tablename" does not exist
查看>>
循环神经网络(Recurrent Neural Networks, RNN)介绍
查看>>
go语言中的strings常用函数和格式化输出
查看>>
!!!!Linux系统开发 系列 4 进程资源 环境 fork()子进程 wait() waitpid()僵尸 孤儿进程...
查看>>
[翻译]现代Linux系统上的栈溢出攻击【转】
查看>>